package com.mcp.converter.domain.parser;

import com.mcp.converter.shared.response.xml.XMLParseResult;
import com.mcp.converter.shared.response.analysis.FallbackCompatibilityResult;
import com.mcp.converter.shared.response.analysis.CompatibilityReclassificationResult;
import com.mcp.converter.shared.response.analysis.BatchAnalysisResponse;
import com.mcp.converter.shared.response.sql.SQLLocation;

import java.util.List;

/**
 * IFP框架XML文件解析器接口
 * 用于解析IFP框架XML文件并提取其中的SQL语句
 * @author zengxiong
 */
public interface IfpXMLParser {

    /**
     * 解析单个IFP框架XML内容
     * @param xmlContent XML内容字符串
     * @param virtualPath 虚拟路径或标识
     * @return XML解析结果
     */
    XMLParseResult parseFileContent(String xmlContent, String virtualPath);

    /**
     * 从IFP框架XML文件中提取所有完整的SQL语句，提取的SQL可用于后续的兼容性分析
     * @param xmlFilePath XML文件路径
     * @return JSON格式的SQL提取结果
     */
    String extractSQLsFromXML(String xmlFilePath);

    /**
     * 修复IFP框架SQL为标准SQL
     * @param sql 原始SQL
     * @param actionType SQL动作类型
     * @return 修复后的标准SQL
     */
    String fixIfpSqlToStandardSql(String sql, String actionType);

    /**
     * 检查SQL语句是否完整
     * @param sqlContent SQL内容
     * @return 是否完整
     */
    boolean isSQLComplete(String sqlContent);

    /**
     * 从文件路径中提取文件名
     * @param filePath 文件路径
     * @return 文件名
     */
    String extractFileNameFromPath(String filePath);

    /**
     * 读取XML文件内容
     * @param xmlFilePath XML文件路径
     * @return 文件内容，失败时返回null
     */
    String readXmlFileContent(String xmlFilePath);

    /**
     * 扫描指定目录下的所有XML文件
     * @param directoryPath 目录路径
     * @param recursive 是否递归扫描子目录
     * @return XML文件路径列表
     */
    List<String> scanXmlFiles(String directoryPath, boolean recursive);

    /**
     * 执行后备兼容性检查
     * @param validSqls 有效SQL列表
     * @param batchResult 批量分析结果
     * @return 后备兼容性检查结果
     */
    FallbackCompatibilityResult performFallbackCompatibilityCheck(List<String> validSqls, BatchAnalysisResponse batchResult);

    /**
     * 执行智能错误重分类
     * @param batchResult 批量分析结果
     * @param validSqls 有效SQL列表
     * @return 重分类结果
     */
    CompatibilityReclassificationResult performIntelligentReclassification(BatchAnalysisResponse batchResult, List<String> validSqls);
}